const mongoose = require('mongoose')
const Schema = mongoose.Schema

// 定义 你的schema
const TokenSchema = new Schema({
  name: String,
  token: String,
  expires_in: Number,
  meta: {
    createdAt: {
      type: Date,
      default: Date.now()
    },
    updatedAt: {
      type: Date,
      default: Date.now()
    }
  }
})
// 数据储存的中间件  是否新增数据 isNew
TokenSchema.pre('save', function(next){
  if(this.isNew) {
    this.meta.createdAt = this.meta.updatedAt = Date.now()
    console.log('新增了一条数据。。。。。。。。。')
  } else {
    this.meta.updatedAt = Date.now()
  }
  next()
})

// 定义一个静态方法 
TokenSchema.statics = {
  async getAccessToken(){
    const token = await this.findOne({
      name: 'access_token'
    }).exec()

    if (token && token.token){
      token.access_token = token.token
    } else {
      console.log("该数据为空")
      return false
    }
    return token
  },

  async saveAccessToken(data) {
    // data 是 获取到的 access_token
    // 找到name 为 access_token 的数据
    let token = await this.findOne({
      name: 'access_token'
    }).exec()
 
    if (token) {
        token.token = data.access_token
        token.expires_in = data.expires_in     
    } else {    
      // new 一个数据模型的实例
      token = new Token({
        name: 'access_token',
        token: data.access_token,     
        expires_in: data.expires_in
      })
    }

    try {
      await token.save()
    } catch (e){
       console.log('存储失败')
       console.log(e)
    }
    
    return data
  }
}
// 获取数据模型
const Token = mongoose.model('Token', TokenSchema, 'Token')